home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / CIncludes / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-17  |  8.1 KB  |  305 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DPick.h
  3.  
  4.      Contains:    Q3Pick methods                                    
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DPICK__
  18. #define __QD3DPICK__
  19.  
  20. #ifndef __QD3D__
  21. #include <QD3D.h>
  22. #endif
  23.  
  24. #ifndef __QD3DSTYLE__
  25. #include <QD3DStyle.h>
  26. #endif
  27. #ifndef __QD3DGEOMETRY__
  28. #include <QD3DGeometry.h>
  29. #endif
  30.  
  31.  
  32.  
  33. #if PRAGMA_ONCE
  34. #pragma once
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT
  42. #pragma import on
  43. #endif
  44.  
  45. #if PRAGMA_STRUCT_ALIGN
  46.     #pragma options align=power
  47. #elif PRAGMA_STRUCT_PACKPUSH
  48.     #pragma pack(push, 2)
  49. #elif PRAGMA_STRUCT_PACK
  50.     #pragma pack(2)
  51. #endif
  52.  
  53. #if PRAGMA_ENUM_ALWAYSINT
  54.     #pragma enumsalwaysint on
  55. #elif PRAGMA_ENUM_OPTIONS
  56.     #pragma option enum=int
  57. #elif PRAGMA_ENUM_PACK
  58.     #if __option(pack_enums)
  59.         #define PRAGMA_ENUM_PACK__QD3DPICK__
  60.     #endif
  61.     #pragma options(!pack_enums)
  62. #endif
  63.  
  64. /*****************************************************************************
  65.  **                                                                            **
  66.  **                            Mask bits for hit information                     **
  67.  **                                                                            **
  68.  *****************************************************************************/
  69.  
  70. enum TQ3PickDetailMasks {
  71.     kQ3PickDetailNone            = 0,
  72.     kQ3PickDetailMaskPickID        = 1 << 0,
  73.     kQ3PickDetailMaskPath        = 1 << 1,
  74.     kQ3PickDetailMaskObject        = 1 << 2,
  75.     kQ3PickDetailMaskLocalToWorldMatrix = 1 << 3,
  76.     kQ3PickDetailMaskXYZ        = 1 << 4,
  77.     kQ3PickDetailMaskDistance    = 1 << 5,
  78.     kQ3PickDetailMaskNormal        = 1 << 6,
  79.     kQ3PickDetailMaskShapePart    = 1 << 7,
  80.     kQ3PickDetailMaskPickPart    = 1 << 8,
  81.     kQ3PickDetailMaskUV            = 1 << 9
  82. };
  83. typedef enum TQ3PickDetailMasks TQ3PickDetailMasks;
  84.  
  85. typedef unsigned long                     TQ3PickDetail;
  86. /******************************************************************************
  87.  **                                                                             **
  88.  **                                Hitlist sorting                                 **
  89.  **                                                                             **
  90.  *****************************************************************************/
  91.  
  92. enum TQ3PickSort {
  93.     kQ3PickSortNone                = 0,
  94.     kQ3PickSortNearToFar        = 1,
  95.     kQ3PickSortFarToNear        = 2
  96. };
  97. typedef enum TQ3PickSort TQ3PickSort;
  98.  
  99.  
  100. /******************************************************************************
  101.  **                                                                             **
  102.  **                    Data structures to set up the pick object                 **
  103.  **                                                                             **
  104.  *****************************************************************************/
  105. #define kQ3ReturnAllHits        0
  106.  
  107. struct TQ3PickData {
  108.     TQ3PickSort                     sort;
  109.     TQ3PickDetail                     mask;
  110.     unsigned long                     numHitsToReturn;
  111. };
  112. typedef struct TQ3PickData                TQ3PickData;
  113.  
  114. struct TQ3WindowPointPickData {
  115.     TQ3PickData                     data;
  116.     TQ3Point2D                         point;
  117.     float                             vertexTolerance;
  118.     float                             edgeTolerance;
  119. };
  120. typedef struct TQ3WindowPointPickData    TQ3WindowPointPickData;
  121.  
  122. struct TQ3WindowRectPickData {
  123.     TQ3PickData                     data;
  124.     TQ3Area                         rect;
  125. };
  126. typedef struct TQ3WindowRectPickData    TQ3WindowRectPickData;
  127. /******************************************************************************
  128.  **                                                                             **
  129.  **                                    Hit data                                 **
  130.  **                                                                             **
  131.  *****************************************************************************/
  132.  
  133. struct TQ3HitPath {
  134.     TQ3GroupObject                     rootGroup;
  135.     unsigned long                     depth;
  136.     TQ3GroupPosition *                positions;
  137. };
  138. typedef struct TQ3HitPath                TQ3HitPath;
  139. /******************************************************************************
  140.  **                                                                             **
  141.  **                                Pick class methods                             **
  142.  **                                                                             **
  143.  *****************************************************************************/
  144. EXTERN_API_C( TQ3ObjectType )
  145. Q3Pick_GetType                    (TQ3PickObject             pick);
  146.  
  147. EXTERN_API_C( TQ3Status )
  148. Q3Pick_GetData                    (TQ3PickObject             pick,
  149.                                  TQ3PickData *            data);
  150.  
  151. EXTERN_API_C( TQ3Status )
  152. Q3Pick_SetData                    (TQ3PickObject             pick,
  153.                                  const TQ3PickData *    data);
  154.  
  155. EXTERN_API_C( TQ3Status )
  156. Q3Pick_GetVertexTolerance        (TQ3PickObject             pick,
  157.                                  float *                vertexTolerance);
  158.  
  159. EXTERN_API_C( TQ3Status )
  160. Q3Pick_GetEdgeTolerance            (TQ3PickObject             pick,
  161.                                  float *                edgeTolerance);
  162.  
  163. EXTERN_API_C( TQ3Status )
  164. Q3Pick_SetVertexTolerance        (TQ3PickObject             pick,
  165.                                  float                     vertexTolerance);
  166.  
  167. EXTERN_API_C( TQ3Status )
  168. Q3Pick_SetEdgeTolerance            (TQ3PickObject             pick,
  169.                                  float                     edgeTolerance);
  170.  
  171. EXTERN_API_C( TQ3Status )
  172. Q3Pick_GetNumHits                (TQ3PickObject             pick,
  173.                                  unsigned long *        numHits);
  174.  
  175. EXTERN_API_C( TQ3Status )
  176. Q3Pick_EmptyHitList                (TQ3PickObject             pick);
  177.  
  178. EXTERN_API_C( TQ3Status )
  179. Q3Pick_GetPickDetailValidMask    (TQ3PickObject             pick,
  180.                                  unsigned long             index,
  181.                                  TQ3PickDetail *        pickDetailValidMask);
  182.  
  183. EXTERN_API_C( TQ3Status )
  184. Q3Pick_GetPickDetailData        (TQ3PickObject             pick,
  185.                                  unsigned long             index,
  186.                                  TQ3PickDetail             pickDetailValue,
  187.                                  void *                    detailData);
  188.  
  189. EXTERN_API_C( TQ3Status )
  190. Q3HitPath_EmptyData                (TQ3HitPath *            hitPath);
  191.  
  192. /******************************************************************************
  193.  **                                                                             **
  194.  **                            Window point pick methods                         **
  195.  **                                                                             **
  196.  *****************************************************************************/
  197. EXTERN_API_C( TQ3PickObject )
  198. Q3WindowPointPick_New            (const TQ3WindowPointPickData * data);
  199.  
  200. EXTERN_API_C( TQ3Status )
  201. Q3WindowPointPick_GetPoint        (TQ3PickObject             pick,
  202.                                  TQ3Point2D *            point);
  203.  
  204. EXTERN_API_C( TQ3Status )
  205. Q3WindowPointPick_SetPoint        (TQ3PickObject             pick,
  206.                                  const TQ3Point2D *        point);
  207.  
  208. EXTERN_API_C( TQ3Status )
  209. Q3WindowPointPick_GetData        (TQ3PickObject             pick,
  210.                                  TQ3WindowPointPickData * data);
  211.  
  212. EXTERN_API_C( TQ3Status )
  213. Q3WindowPointPick_SetData        (TQ3PickObject             pick,
  214.                                  const TQ3WindowPointPickData * data);
  215.  
  216.  
  217. /******************************************************************************
  218.  **                                                                             **
  219.  **                            Window rect pick methods                         **
  220.  **                                                                             **
  221.  *****************************************************************************/
  222. EXTERN_API_C( TQ3PickObject )
  223. Q3WindowRectPick_New            (const TQ3WindowRectPickData * data);
  224.  
  225. EXTERN_API_C( TQ3Status )
  226. Q3WindowRectPick_GetRect        (TQ3PickObject             pick,
  227.                                  TQ3Area *                rect);
  228.  
  229. EXTERN_API_C( TQ3Status )
  230. Q3WindowRectPick_SetRect        (TQ3PickObject             pick,
  231.                                  const TQ3Area *        rect);
  232.  
  233. EXTERN_API_C( TQ3Status )
  234. Q3WindowRectPick_GetData        (TQ3PickObject             pick,
  235.                                  TQ3WindowRectPickData * data);
  236.  
  237. EXTERN_API_C( TQ3Status )
  238. Q3WindowRectPick_SetData        (TQ3PickObject             pick,
  239.                                  const TQ3WindowRectPickData * data);
  240.  
  241.  
  242.  
  243. /******************************************************************************
  244.  **                                                                             **
  245.  **                                Shape Part methods                             **
  246.  **                                                                             **
  247.  *****************************************************************************/
  248. EXTERN_API_C( TQ3ObjectType )
  249. Q3ShapePart_GetType                (TQ3ShapePartObject     shapePartObject);
  250.  
  251. EXTERN_API_C( TQ3ObjectType )
  252. Q3MeshPart_GetType                (TQ3MeshPartObject         meshPartObject);
  253.  
  254. EXTERN_API_C( TQ3Status )
  255. Q3ShapePart_GetShape            (TQ3ShapePartObject     shapePartObject,
  256.                                  TQ3ShapeObject *        shapeObject);
  257.  
  258. EXTERN_API_C( TQ3Status )
  259. Q3MeshPart_GetComponent            (TQ3MeshPartObject         meshPartObject,
  260.                                  TQ3MeshComponent *        component);
  261.  
  262. EXTERN_API_C( TQ3Status )
  263. Q3MeshFacePart_GetFace            (TQ3MeshFacePartObject     meshFacePartObject,
  264.                                  TQ3MeshFace *            face);
  265.  
  266. EXTERN_API_C( TQ3Status )
  267. Q3MeshEdgePart_GetEdge            (TQ3MeshEdgePartObject     meshEdgePartObject,
  268.                                  TQ3MeshEdge *            edge);
  269.  
  270. EXTERN_API_C( TQ3Status )
  271. Q3MeshVertexPart_GetVertex        (TQ3MeshVertexPartObject  meshVertexPartObject,
  272.                                  TQ3MeshVertex *        vertex);
  273.  
  274.  
  275.  
  276.  
  277. #if PRAGMA_ENUM_ALWAYSINT
  278.     #pragma enumsalwaysint reset
  279. #elif PRAGMA_ENUM_OPTIONS
  280.     #pragma option enum=reset
  281. #elif defined(PRAGMA_ENUM_PACK__QD3DPICK__)
  282.     #pragma options(pack_enums)
  283. #endif
  284.  
  285. #if PRAGMA_STRUCT_ALIGN
  286.     #pragma options align=reset
  287. #elif PRAGMA_STRUCT_PACKPUSH
  288.     #pragma pack(pop)
  289. #elif PRAGMA_STRUCT_PACK
  290.     #pragma pack()
  291. #endif
  292.  
  293. #ifdef PRAGMA_IMPORT_OFF
  294. #pragma import off
  295. #elif PRAGMA_IMPORT
  296. #pragma import reset
  297. #endif
  298.  
  299. #ifdef __cplusplus
  300. }
  301. #endif
  302.  
  303. #endif /* __QD3DPICK__ */
  304.  
  305.